<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script>
        /* 

            1. promise是什么？

            - promise是异步编程的解决方案，比传统的回调函数，更合理，代码可读性和性能上更加强大。ES6将promise写入了语言标准，原生提供了promise对象。
            - 总结：解决了异步回调地狱的问题，比回调函数更灵活更易读。

            回调地狱：一个回调函数嵌套另一个回调函数，出现了嵌套结构，嵌套多了就会出现。
            比如：一共需要发送三个请求，第二个需要第一个的结果，第三个需要第二个的结果。

        */

            // 浏览器内置了promise构造函数  接受一个参数 excutor执行器函数
            // 注意 promise对象的方法是异步方法 不会立即执行 ， 但是执行器函数会立即执行 是同步方法
            var mypro = new Promise((resolve, reject) => {
                // 两个参数 还是两个函数 resolve 是执行成功的回调  reject 是执行失败的回调
                resolve("a");
                // reject()
            });

            /* 
        2. promise对象的三种状态 
        状态的变化不可逆  对异步操作状态的监测
        - pennding   未执行时的状态
        - fulfilled  成功的状态 （出发.then第一个参数）
        - rejected   失败的状态 （触发.then第二个参数 或 .catch 回调）
        
        */
            console.log(mypro);

            // .then 有两个参数  第一个参数是promise结果为成功的回调  第二个参数是promise结果为失败的结果 等同于 .catch
            mypro.then(
                (res) => {
                    console.log("成功", res);
                },
                () => {
                    console.log("失败1");
                }
            );
            mypro.catch(() => {
                console.log("失败2");
            });
            // mypro.finally(()=>{
            //     console.log('执行');
            // })
        </script>
    </body>
</html>
